/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package baseDatos;

import entidades.Empleado;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Facundo
 */
public class EmpleadoDAO {
    private String query;
    private Connection conDB;
    private PreparedStatement pst;

    public EmpleadoDAO(Connection con) {
        this.conDB = con;
    }

    public EmpleadoDAO() {
    }

    /**
     * @return the query
     */
    public String getQuery() {
        return query;
    }

    /**
     * @param query the query to set
     */
    public void setQuery(String query) {
        this.query = query;
    }

    /**
     * @return the conDB
     */
    public Connection getConDB() {
        return conDB;
    }

    /**
     * @param conDB the conDB to set
     */
    public void setConDB(Connection conDB) {
        this.conDB = conDB;
    }

    /**
     * @return the pst
     */
    public PreparedStatement getPst() {
        return pst;
    }

    /**
     * @param pst the pst to set
     */
    public void setPst(PreparedStatement pst) {
        this.pst = pst;
    }

    /*
     * Metodo que devuelve un empleado de acuerdo al codigo del mismo recibido por parametro
     */
    public Empleado getEmpleado(int codigo){
        Empleado emp = null;
        setQuery("select * from PC_EMPLEADO where codigo_empleado=" + codigo);
        emp = this.devolverEmpleado(getQuery());
        return emp;
    }
    /*
     * Metodo que devuelve un empleado de acuerdo al tipo y numero de documento del mismo recibido por
     * parametro
     */
    public Empleado getEmpleado(long numero, String tipo){
        Empleado emp = null;
        setQuery("select * from PC_EMPLEADO where tipo_doc='" + tipo + "' and nro_doc=" + numero);
        emp = this.devolverEmpleado(getQuery());
        return emp;
    }

    /*
     * Metodo que devuelve un empleado de acuerdo a la sentencia recibida por parametro
     */
    private Empleado devolverEmpleado(String sentencia) {
        Empleado emp = null;
        ResultSet rs = null;
        setQuery(sentencia);
        try {
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
                emp = new Empleado();
                emp.setNombre(rs.getString("nombre"));
                emp.setApellido(rs.getString("apellido"));
                emp.setNro_documento(rs.getLong("nro_doc"));
                emp.setTipo_documento(rs.getString("tipo_doc"));
                emp.setLegajo(rs.getInt("codigo_empleado"));
            }
            getPst().close();
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(EmpleadoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return emp;
    }

     /*
     * Metodo que devuelve un arrayList de empleados
     * por parametro..
     */
    public ArrayList getEmpleados(){
        ArrayList todos = null;
        setQuery("select * from PC_EMPLEADO");
        todos = this.devolverEmpleados(getQuery());
        return todos;
    }

    /*
     * Metodo que retorna un arrayList de Empleados, de acuerdo a la sentencia
     * recibida como parametro de entrada
     */
    private ArrayList devolverEmpleados(String sentencia) {
        ArrayList todos = null;
        Empleado emp = null;
        ResultSet rs;
        setQuery(sentencia);
        try {
            todos = new ArrayList();
            setPst(getConDB().prepareStatement(getQuery()));
            rs = getPst().executeQuery();
            while (rs.next()) {
              emp = new Empleado();
              emp.setNombre(rs.getString("nombre"));
              emp.setApellido(rs.getString("apellido"));
              emp.setNro_documento(rs.getLong("nro_doc"));
              emp.setTipo_documento(rs.getString("tipo_doc"));
              emp.setLegajo(rs.getInt("codigo_empleado"));
              todos.add(emp);
            }
            rs.close();
            getPst().close();
        } catch (SQLException ex) {
            Logger.getLogger(EmpleadoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return todos;
    }
}
